package com.yune.activity.main;
import android.Manifest;
import android.app.AlertDialog;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.os.StrictMode;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.SearchView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.view.MenuItemCompat;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;

import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.yune.R;
import com.yune.activity.App;
import com.yune.utils.AudioPicker;
import com.yune.utils.Utils;
public class MainActivity extends AppCompatActivity {
    //Nav导航  Controller控制器  NavController 导航控制器
    private NavController navController;
    @RequiresApi(api = Build.VERSION_CODES.M)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //BottomNavigationView底部导航视图
        BottomNavigationView navView = findViewById(R.id.nav_view);
        //App应用程序，   bar 条，  AppBarApp 导航栏 ， Configuration配置
        AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(R.id.navigation_find, R.id.navigation_playing, R.id.navigation_me).build();
        //发现导航栏设计   navController 导航栏控制器
        navController = Navigation.findNavController(this, R.id.nav_host_fragment);
        //set设置，up在什么上面，Action动作，with具有，setupActionBarWithNavController设置操作栏
        NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
        //setupWithNavController设置导航控制器
        NavigationUI.setupWithNavController(navView, navController);
        //requestPermissions请求权限，WRITE_EXTERNAL_STORAGE 写入外部存储器  request请求代码
        requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
        //严格网络模式 ，Strict 精确的，严格的 mode 模式， ThreadPolicy线程策略 permit许可证
        StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
        //创建消息通道，Channel 通道，渠道
        Utils.createNotificationChannel(this);
        if(App.sp.getBoolean("FIRST",true)){//第一次打开，FIRST第一
            //edit编辑
            App.sp.edit().putBoolean("FIRST", false).apply();
            //为使用默认警报对话框主题的警报对话框创建生成器。
            //默认的警报对话框主题由android.R定义。属性alertDialogTheme在父上下文的主题中。
            //参数：context–父上下文
            AlertDialog.Builder dialog=new AlertDialog.Builder(this);
            //PositiveButton 正极按钮
            dialog.setTitle("通知").setMessage("是否打开消息通知").setPositiveButton("去打开", (dialog13, which) -> {
                //com.yune.utils.Utils
                Utils.gotoNotificationSetting(this);
            }).setNeutralButton("关闭",null).show();//设置在按下对话框的中性按钮时要调用的侦听器
        }       //set设置，Neutral中性的，NeutralButton中性的按钮
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //CreateOptionsMenu创建选项菜单， options选择
        getMenuInflater().inflate(R.menu.main_top, menu);
        MenuItem item = menu.findItem(R.id.search);
        SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
        //MenuItemCompat   Compat兼容性，getActionView返回此菜单项当前设置的操作视图。
        searchView.setQueryHint("歌曲/歌手");//QueryHint查询提示，Query查询，hint提示
        searchView.setIconified(false);//Iconified 图标化
        searchView.setSubmitButtonEnabled(true);//SubmitButtonEnabled提交按钮启用，Submit提交，Enabled启用
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {//QueryTextListener查询文本侦听器
            @Override
            public boolean onQueryTextSubmit(String query) {
                //Bundle捆绑
                Bundle bundle = new Bundle();
                // putString将字符串值插入此绑定的映射中，替换给定键的任何现有值。键或值可以为null。
                //参数：key–字符串，或null
                //     value–字符串或null
                bundle.putString("kw", query);//query 要提交的查询文本
                navController.navigate(R.id.navigation_find,bundle);
                return false;
            }
            @Override
            public boolean onQueryTextChange(String newText) {
                return false;
            }
        });//QueryTextChange查询文本更改
        return true;
    }
    @RequiresApi(api = Build.VERSION_CODES.KITKAT)
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        //OptionsItemSelected选项的项目选择
        if (item.getItemId()==R.id.localfile){
            Intent intent = new Intent();
            //setType设置显式MIME数据类型。
            //这用于创建只指定类型而不指定数据的意图，例如指示要返回的数据类型。
            //此方法会自动清除以前设置的任何数据（例如setData）。
            // 参数：type–此意图处理的数据的MIME类型。
            //           return：返回相同的Intent对象，用于将多个调用链接到单个语句中。
            intent.setType("audio/*");
            //setAction设置要执行的常规操作，ACTION_GET_CONTENT操作获取内容
            intent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(intent, 123);//Result结果
        }
        return  true;
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        //onActivityResult将传入结果分派到正确的片段。
        /**
         * 参数：
         * requestCode–最初提供给startActivityForResult（）的整数请求代码，允许您标识此结果的来源。
         * resultCode–子活动通过其setResult（）返回的整数结果代码。
         * data–一个Intent，可以将结果数据返回给调用者（各种数据可以附加到Intent“extras”）。
         */
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode==123&&data!=null){

            String path;
            if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {
                path = AudioPicker.getPath(this,data.getData());
            } else {
                path = AudioPicker.getRealPathFromURI(data.getData(),this);//getRealPathFromURI获得真正的路径
            }
            Bundle bundle = new Bundle();
            bundle.putString("loadFile", path);
            navController.navigate(R.id.navigation_playing,bundle);
        }
    }
    public void title(String t){
        this.setTitle(t);
    }
}